Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
https://gocon.jp/2025/talks/958952/
https://speakerdeck.com/takehaya/go-conference-2025-godeti-gan-surumultipath-tcp-go-1-dot-24-shi-dai-no-mptcp-listener-woli-jie-suru
Multipath TCP(MPTCP)
TCP のマルチパス化技術
アプリ側は従来の TCP を扱うように、低レイヤの複数の [TCP コネクション(subflow)を束ねる仕組みを持っている
複数の Network Interface を持つクライアントのコネクションを束ねて通信の帯域を拡張し、冗長性 を高めることができる
メリット
シームレスな ハンドオーバー
帯域幅の集約
最適経路選択
様々なツールが対応(e.g. curl、QEMU)
ネゴシエーション
1 つ目は MP_CAPABLE という TCP Option を加えて実施し、subflow を作る
2 つ目以降は MP_JOIN を使って、既存の subflow が存在しているセッションに紐付け
ADD_ADDR を使って、subflow を作ることができるアドレスを通知できる
Go のサポート
v1.21 にサポートされた(明示的な有効化が必要)
v.1.24 に OS が対応していれば自動的に MPTCP の Listen になった
クライアントサイドは特に何も変わらない
TCP で Dial する場合は TCP コネクション、明示的に MPTCP を有効化した場合には MPTCP 接続が可能
そのため、既存のコード修正は基本的には一切不要
ただし、MPTCP は主要な Socket Option を満たしているが、一部足りていない機能も存在しているため、注意が必要なケースも
その場合、ListenConfig.SetMultipathTCP(false) または GODEBUG=multipathtcp=0 で無効化すれば OK
#Go #Go_Conference_2025